package cj.web.portal.controllers;

import java.io.File;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

import cj.utils.Constants;
import cj.utils.MailUtil;
import cj.utils.Page;
import cj.utils.ReadConfigProperties;
import cj.utils.ReturnUUID;
import cj.web.admin.constants.CategoryEnum;
import cj.web.admin.constants.EmailEnum;
import cj.web.portal.dao.LineDAO;
import cj.web.portal.dao.UCDAO;
import net.paoding.rose.web.annotation.Param;
import net.paoding.rose.web.annotation.Path;
import net.paoding.rose.web.annotation.rest.Get;
import net.paoding.rose.web.annotation.rest.Post;
import net.paoding.rose.web.var.Flash;
import net.paoding.rose.web.var.Model;
import net.sf.json.JSONObject;

/**
 * 发行网点、报亭查询、呼叫中心、网上订报、下载中心、新闻爆料
 * @author HanMin
 *
 * 2015年12月29日
 */
@Path("uc")
public class UserCenterController {

	private static Logger logger = Logger.getLogger(UserCenterController.class.getName());
	
	@Autowired
	public UCDAO ucDAO;
	@Autowired
	public LineDAO lineDAO;
	
	//用户中心
	@Get("uc")
	public String showUC(Model model)
	{
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "uc/uc.vm";
	}
	
	//发行网点
	@Get("fxwd")
	public String showFXWD(Model model)
	{
		model.add("head","uc");
		model.add("memu","fxwd");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "uc/fxwd.vm";
	}
	
	//发行网点json
	@Post("lsFXWD")
	public String getListByFXWD(@Param("name") String name,
			@Param("start") int start,@Param("length") int length)
	{
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		//列表
		List<Map> reps = ucDAO.queryNetworkInfoByName(name, start*length, length);
		//列表size
		int size = ucDAO.queryNetworkInfoByNameCount(name);
		List<Map> list = new ArrayList<Map>();
		for(Map rep :reps)
		{
			Map liRep = new HashMap();//name,address,phone,link
			liRep.put("name", rep.get("name"));//名称
			liRep.put("address", rep.get("address"));//地址
			liRep.put("phone", rep.get("phone"));//电话
			liRep.put("link", rep.get("link"));//联系人
			list.add(liRep);
		}
		
		Page p= new Page<Map>(0, length, list, size);
		
		jo.put("list", list);//列表
		jo.put("totalCount", size);
		return "@"+jo.toString();
	}
	
	//报亭查询
	@Get("btcx")
	public String showBTCX(Model model)
	{
		model.add("head","uc");
		model.add("memu","btcx");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "uc/btcx.vm";
	}
	
	//报亭查询json
	@Get("lsBTCX")
	public String getListByBTCX(@Param("name") String name,
			@Param("start") int start,@Param("length") int length)
	{
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		//列表
		List<Map> reps = ucDAO.queryNewsstandInfoByName(name, start*length, length);
		//列表size
		int size = ucDAO.queryNewsstandInfoByNameCount(name);
		List<Map> list = new ArrayList<Map>();
		for(Map rep :reps)
		{
			Map liRep = new HashMap();//name,address,phone,link
			liRep.put("name", rep.get("name"));//名称
			liRep.put("address", rep.get("address"));//地址
			liRep.put("phone", rep.get("phone"));//电话
			liRep.put("link", rep.get("link"));//联系人
			list.add(liRep);
		}
		jo.put("list", list);//列表
		jo.put("totalCount", size);
		return "@"+jo.toString();
	}
	
	//呼叫中心
	@Get("hjzx")
	public String showHJZX(Model model)
	{
		model.add("head","uc");
		model.add("memu","hjzx");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "uc/hjzx.vm";
	}
	
	//呼叫中心json
	@Get("lsHJZX")
	public String getListByHJZX(@Param("name") String name,@Param("phone") String phone,
			@Param("start") int start,@Param("length") int length)
	{
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		//列表
		List<Map> reps = ucDAO.queryCallCenterInfoByName(name,phone, start*length, length);
		//列表size
		int size = ucDAO.queryCallCenterInfoByNameCount(name,phone);
		List<Map> list = new ArrayList<Map>();
		for(Map rep :reps)
		{
			Map liRep = new HashMap();//name,address,phone,link
			liRep.put("name", rep.get("name"));//名称
			liRep.put("phone", rep.get("phone"));//电话
			liRep.put("link", rep.get("link"));//联系人
			list.add(liRep);
		}
		jo.put("list", list);//列表
		jo.put("totalCount", size);
		return "@"+jo.toString();
	}
	
	//新闻爆料
	@Get("xwbl")
	public String showXWBL(Model model,Flash flash)
	{		
		model.add("head","uc");
		model.add("memu","xwbl");
		model.add("success",flash.get("success")==null?"":flash.get("success").toString());
		model.add("email",EnumSet.allOf(EmailEnum.class));
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "uc/xwbl.vm";
	}
	
	/**
	 * 提交新闻爆料
	 * @param model
	 * @param toAddress	收稿信箱
	 * @param title		稿件标题
	 * @param descs		稿件内容
	 * @param imgUrl	图片附件
	 * @param link		您的称呼
	 * @param phone		联系方式
	 * @param address	通讯地址
	 * @return
	 */
	@Post("subxwbl")
	public String subXWBL(Flash flash,HttpServletRequest request,@Param("toAddress")String toAddress,@Param("title")String title,
			@Param("descs")String descs,MultipartFile file,@Param("link")String link,@Param("phone")String phone,@Param("address")String address)
	{
		String imgUrl = "";
		// 判断文件是否为空  
        if (file!=null && !file.isEmpty()) {  
            try {  
            	// 文件保存路径  
            	String path = ReadConfigProperties.getValue("uploadFilePath");
            	//判断文件是否存在，不存在创建文件
            	Map rep = ReturnUUID.getFolder(path);
            	path = rep.get("allpath").toString();//所在的全路径
            	//文件名
                String fileName =  ReturnUUID.getName(file.getOriginalFilename()); 
                // 转存文件  
                file.transferTo(new File(path+"/"+fileName));
                //存储路径
                imgUrl = rep.get("filepath")+"/"+fileName;
                
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }
        
        ucDAO.saveTipInfo(toAddress, title, descs, imgUrl, link, phone, address);
        
        String staticPath = ReadConfigProperties.getValue("staticPath");
        MailUtil.sendMail("1987hanmin@163.com", "82770265hm", "cjrbjt@163.com", title, 
        		"称呼：" + link + "<br>联系方式：" + phone + (!"".equals(address) ? ("<br>通讯地址：" + address) : "") + 
        		"<br>标题：" + title + "<br>内容：" + descs + (!"".equals(imgUrl)?("<br><img src='"+ staticPath + imgUrl +"' />") : ""));
		
        flash.add("success","您的报料都将尽快反馈到相关记者处");
		return "r:xwbl";
	}
	
	
	//下载中心 -- 新媒体
	@Get("xzzxxmt")
	public String showXZZX(Model model)
	{
		model.add("head","uc");
		model.add("memu","xzzxxmt");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "xzzx/xmt.vm";
	}
	
	//下载中心 -- 公告
	@Get("xzzxgg")
	public String showGG(Model model)
	{
		model.add("head","uc");
		model.add("memu","xzzxgg");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "xzzx/gg.vm";
	}
	
	//下载中心 -- 资料
	@Get("xzzxzl")
	public String showZL(Model model)
	{
		model.add("head","uc");
		model.add("memu","xzzxzl");
		model.add("jtpphdls", jtpphd(String.valueOf(CategoryEnum.CJTT_PPHD.getValue())));//集团品牌活动列表
		return "xzzx/zl.vm";
	}
		
	//下载中心请求list
	@Get("lisxz")
	public String golisxz(@Param("category") String category,
			@Param("start") int start,@Param("length") int length)
	{
		JSONObject jo = new JSONObject();
		jo.put("returnFlag", Constants.returnObj.returnFlag_true);
		List<Map> reps = ucDAO.queryDownloadByType(category, start*length, length);		
		int size = ucDAO.downloadSizeByType(category);
		
		List<Map> list = new ArrayList<Map>();
		for(Map rep :reps)
		{
			Map map = new HashMap();
			map.put("title", rep.get("title"));
			map.put("content", rep.get("content"));
			map.put("upFile", rep.get("upFile"));
			map.put("carouselImage", rep.get("carouselImage"));
			
			list.add(map);
		}
		
		jo.put("list", list);
		jo.put("totalCount", size);
		return "@"+jo.toString();
	}
	
	/**
	 * 集团down
	 * @param category
	 * @return
	 */
	private List<Map> jtpphd(String category)
	{
		//集团品牌活动
		List<Map> ppls = lineDAO.query(category, 0, 5);
		List<Map> pphdls = new ArrayList<Map>();
		for(Map rep :ppls)
		{
			Map l_rep = new HashMap();
			l_rep.put("id", rep.get("id"));//ID
			String title=rep.get("title").toString();
			if(title.length()>15)
			{
				title=title.toString().substring(0, 15)+"...";
			}
			l_rep.put("title", title);//标题
			l_rep.put("abstractInfor", rep.get("abstractInfor"));//简介
			//缩率图
			String carouselImage = rep.get("carouselImage")==null?"":rep.get("carouselImage").toString();
//			if(carouselImage !=null && !"".equals(carouselImage))
//			{
//				String carouselImages[] = carouselImage.split("/");
//				l_rep.put("carouselImage", carouselImages[0]+"/s_"+carouselImages[1]);//缩率图
//			}
//			else
//			{
//				l_rep.put("carouselImage", "");//缩率图
//			}
			l_rep.put("carouselImage", carouselImage);//缩率图
			pphdls.add(l_rep);
		}
		return pphdls;
	}
}
